Console-to-Codeが一般提供開始になりました!

Console-to-Codeが一般提供開始になりました!

Clock Icon2024.10.10

2024/10/11 6:20追記
What's newでも記事が追加されたため、アナウンスへのリンクを記載します。

https://aws.amazon.com/jp/about-aws/whats-new/2024/10/general-availability-console-to-code-generate-code/


こんにちは。まるとです。
現地時間2024/10/3に、Amazon Q Developer Console-to-Codeの一般提供開始(GA)が発表されました。

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/doc-history.html

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/console-to-code.html

これにより、AWSマネジメントコンソール上からリソースに関する操作を記録し、AWS CloudFormationやCDKのコードを生成できるようになります。

例えば、従来ではAmazon RDSをAWS CloudFormationなどで構築しようとすると、公式ドキュメントなどを見ながらテンプレートを書いていく必要があります。

今回発表されたConsole-to-Codeを使用することで、AWSマネジメントコンソール上から実際にリソースを構築するだけで、AWS CloudFormationのテンプレートを生成できます。
これによりテンプレートの記述に慣れていない方でも、IaCを利用できます。
なお、本記事執筆時点でConsole-to-Codeに対応しているAWSサービスは以下のとおりです。

  • Amazon VPC
  • Amazon EC2
  • Amazon RDS

触ってみる

具体的にどのような挙動になるのか、コードとして出力されたものを実際に使うまでやってみます。
今回はAmazon RDSを例に操作していきます。

AWSマネジメントコンソールでRDSを開きます。
RDSダッシュボードを開いた状態で、画面右端を確認するとコンソールから矢印が出ているアイコンが追加されています。
このアイコンを押下するとConsole-to-Codeのメニューが表示されます。

ma-D-1

早速、「記録を開始」ボタンを押下して操作をConsole-to-Codeに認識させてみます。

ma-D-2

「記録を開始」ボタンを押下すると、記録が進行中の画面になります。
これで操作がConsole-to-Codeに記録されていきます。

ma-D-3

それでは、いつも通りデータベースを作成していきます。
今回は以下の構成で作成しました。

項目名 設定値
DBエンジン PostgreSQL
エンジンバージョン 16.3
認証情報管理 セルフマネージド、パスワード自動作成
DBインスタンスクラス t4g.micro
ストレージクラス gp3
ストレージ割り当て 20 GiB
ストレージの自動スケーリング 1000 GiB
データベース認証 パスワード認証
Performance Insights をオンにする 有効
Performance Insights の保持期間 7
拡張モニタリング 無効
最初のデータベース名 設定なし
DB パラメータグループ default.postgres16
自動バックアップを有効にします 有効
バックアップ保持期間 1

AWSマネジメントコンソールで実際にデータベースを作成すると、Console-to-Codeの画面でもcreateDBInstanceという操作が表示されます。
これでCLIコマンドやCloudFormation YAMLの生成準備は完了です。

ma-D-4

それでは実際にCloudFormation YAMLの生成をしてみます。
CLIコマンドやCloudFormation YAMLを生成したい操作を選択後、「CFN YAMLを生成」ボタンを押下します。

ma-D-5

ボタンを押下すると、操作に応じたCLIコマンドやCloudFormation YAMLが生成されます。

ma-D-6

それでは生成されたものを見ていきます。

CLIコマンド

aws rds create-db-instance --engine "postgres" --engine-version "16.3" --engine-lifecycle-support "open-source-rds-extended-support-disabled" --db-instance-identifier "database-1" --master-username "postgres" --db-instance-class "db.t4g.micro" --db-subnet-group-name "test-subnet-group" --db-name "" --character-set-name 'null' --nchar-character-set-name 'null' --vpc-security-group-ids "sg-xxxxxxxxxxxxxx" --db-security-groups 'null' --availability-zone 'null' --port "5432" --storage-type "gp3" --allocated-storage "20" --iops 'null' --storage-throughput 'null' --kms-key-id 'null' --preferred-maintenance-window 'null' --preferred-backup-window 'null' --backup-retention-period "1" --performance-insights-kmskey-id 'null' --performance-insights-retention-period "7" --monitoring-role-arn 'null' --monitoring-interval 'null' --domain 'null' --domain-iam-role-name 'null' --domain-fqdn 'null' --domain-ou 'null' --domain-auth-secret-arn 'null' --domain-dns-ips 'null' --db-parameter-group-name "default.postgres16" --option-group-name "default:postgres-16" --timezone 'null' --processor-features 'null' --max-allocated-storage "1000" --network-type 'null' --backup-target 'null' --ca-certificate-identifier "rds-ca-rsa2048-g1" --master-user-password "xxxxxxxxxxxxxxxxxxxx" 
Resources:
  DatabaseInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      Engine: postgres
      EngineVersion: 16.3
      DBInstanceClass: db.t4g.micro
      DBSubnetGroupName: test-subnet-group
      VPCSecurityGroups: 
        - sg-xxxxxxxxxxxxxx
      Port: 5432
      StorageType: gp3
      AllocatedStorage: 20
      BackupRetentionPeriod: 1
      PerformanceInsightsRetentionPeriod: 7
      DBParameterGroupName: default.postgres16
      OptionGroupName: default:postgres-16
      MaxAllocatedStorage: 1000
      CACertificateIdentifier: rds-ca-rsa2048-g1
      MasterUsername: postgres
      MasterUserPassword: xxxxxxxxxxxxxxxxxxxx
      DBInstanceIdentifier: database-1

CLIコマンドに関しては一つ一つ設定値が細かくパラメータとして出力されている形でした。
一方でCloudFormation YAMLではCLIコマンドほどはパラメータが設定されておらず、比較的シンプルな形となっています。

CLIコマンドとCloudFormation YAMLの両方で気になる点として、管理者アカウントのパスワードがハードコードされているのが気になる点です。
認証情報はSecrets Managerを使用して管理し、テンプレート内では参照する形にすることをお勧めします。
例えば、CloudFormationテンプレートの場合、AWS::SecretsManager::Secretリソースを使用してパスワードを管理し、Ref関数で参照させる記載方法がございます。

そのため、生成時の注意書きにも「このコードを開発の出発点として使用してください。」 と記載されている通り生成されたものをそのまま使うのではなく、適宜修正を行うことが必要です。

まとめ

今回は遂に一般提供を開始したConsole-to-Codeを使用してみました。
生成されたものは確認・修正が必要ですが、AWSマネジメントコンソールから自身のやりたいことを操作することで、IaCテンプレートをある程度できた状態から作れるのは、効率化に寄与できるのではないかと感じました。  
その他、普段の操作を記録することで、後からIaCで使用できるようにしたい!というユースケースにも対応できるのではないかと思います。

おまけ

「CFN YAMLを生成」の横にあるドロップダウンボタンを押下してみたところ、CDKのソースコードやJSON形式のCFnテンプレートを作成できるようになっていました。

ma-D-7

VPCでは、VPC作成の画面に「Preview Code」というのが追加され、実際にVPCを作成をしなくてもConsole-to-Codeが使用できるようになっていました。

ma-D-8

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.